package com.hhc.service.impl;

import com.hhc.dto.SystemConfigDTO;
import com.hhc.entity.SystemConfigDO;
import com.hhc.query.SystemConfigQuery;
import com.hhc.repository.SystemConfigRepository;
import com.hhc.service.SystemConfigService;
import com.hhc.utils.RestResult;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * <p>
 *   系统配置业务逻辑实现类
 * </p>
 * @author pc
 */
@Slf4j
@Service
public class SystemConfigServiceImpl implements SystemConfigService {

    @Autowired
    private SystemConfigRepository systemConfigRepository;

    @Override
    @Transactional
    public RestResult addSystemConfig(SystemConfigDTO systemConfigDTO) {
        if (systemConfigRepository.findByConfigKey(systemConfigDTO.getConfigKey()) != null) {
            return RestResult.fail("000001", "配置键名已存在");
        }
        SystemConfigDO systemConfigDO = convertDTOToDO(systemConfigDTO);
        systemConfigRepository.save(systemConfigDO);
        return RestResult.success("调用成功");
    }

    @Override
    @Transactional
    public RestResult updateSystemConfig(SystemConfigDTO systemConfigDTO) {
        Optional<SystemConfigDO> optionalSystemConfigDO = systemConfigRepository.findById(systemConfigDTO.getConfigId());
        if (!optionalSystemConfigDO.isPresent()) {
            return RestResult.fail("000001", "配置信息不存在");
        }
        SystemConfigDO systemConfigDO = optionalSystemConfigDO.get();
        systemConfigDO.setConfigValue(systemConfigDTO.getConfigValue());
        systemConfigDO.setDescription(systemConfigDTO.getDescription());
        systemConfigRepository.save(systemConfigDO);
        return RestResult.success("调用成功");
    }

    @Override
    @Transactional
    public RestResult deleteSystemConfig(Long configId) {
        Optional<SystemConfigDO> optionalSystemConfigDO = systemConfigRepository.findById(configId);
        if (!optionalSystemConfigDO.isPresent()) {
            return RestResult.fail("000001", "配置信息不存在");
        }
        systemConfigRepository.deleteById(configId);
        return RestResult.success("调用成功");
    }

    @Override
    public RestResult getSystemConfigList(SystemConfigQuery systemConfigQuery) {
        List<SystemConfigDO> systemConfigDOList = systemConfigRepository.findAll();
        List<SystemConfigDTO> systemConfigDTOList = systemConfigDOList.stream()
                .map(this::convertDOToDTO)
                .collect(Collectors.toList());
        return RestResult.success("调用成功", systemConfigDTOList);
    }

    @Override
    public RestResult getSystemConfigByKey(String configKey) {
        SystemConfigDO systemConfigDO = systemConfigRepository.findByConfigKey(configKey);
        if (systemConfigDO == null) {
            return RestResult.fail("000001", "配置信息不存在");
        }
        SystemConfigDTO systemConfigDTO = convertDOToDTO(systemConfigDO);
        return RestResult.success("调用成功", systemConfigDTO);
    }

    private SystemConfigDO convertDTOToDO(SystemConfigDTO systemConfigDTO) {
        SystemConfigDO systemConfigDO = new SystemConfigDO();
        systemConfigDO.setConfigKey(systemConfigDTO.getConfigKey());
        systemConfigDO.setConfigValue(systemConfigDTO.getConfigValue());
        systemConfigDO.setDescription(systemConfigDTO.getDescription());
        return systemConfigDO;
    }

    private SystemConfigDTO convertDOToDTO(SystemConfigDO systemConfigDO) {
        SystemConfigDTO systemConfigDTO = new SystemConfigDTO();
        systemConfigDTO.setConfigId(systemConfigDO.getId());
        systemConfigDTO.setConfigKey(systemConfigDO.getConfigKey());
        systemConfigDTO.setConfigValue(systemConfigDO.getConfigValue());
        systemConfigDTO.setDescription(systemConfigDO.getDescription());
        return systemConfigDTO;
    }
}